<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //需求: 先发请求获取用户信息(用户id,用户头像,用户昵称), 再发请求获取用户的考试成绩( 用户id,用户成绩,平均成绩 ), 再发请求获取近三个月的考试成绩.

    //知识点: 所有ajax请求的回调函数都是异步执行的.
    //如果后一个请求依赖于前一个请求的结果, 这样嵌套的ajax调用就产生 "回调地狱" 现象.
    //可以使用promise技术来解决这个问题 ( 回调地狱 )


    //promise本身是es6新语法，意思是“承诺”
    //promies以三种状态来表示内部代码运行的结果
    //状态：unfinished 未完成（初始状态）
    //状态一：finished 完成，成功
    //状态二：rejected 拒绝，失败

    //语法：new Promise( (resolve , reject)=>{ } )

    new Promise( ( resolve , reject )=>{
        //在这里面可以写任何的js代码
        //写在这里的代码可以看做一个任务，一个承诺，一个耗时的功能，这个任务最终必须有一个运行结果( 必须是明确的结果 )
        //想要在这里更改Promise对象的状态，必须使用resolve,reject函数

        //调用resolve函数 则Promise对象的状态会立即变为finished 成功
        //调用reject函数 则Peomise对象的状态会立即变为rejected 失败

        //用定时器模拟一个耗时任务，五秒后任务执行完毕
        setTimeout( ()=>{
            // resolve(88888888)//当前Promise对象的状态变为 finished 成功，会立即调用then方法的回调函数
            reject(888888) //将当前Promise对象的状态变为rejected 失败，会立即调用catch方法的回调函数
        } ,5000)
    } ).then( (res)=>{
        console.log("Promise对象的状态变为 finished 成功" , res);
    }).catch( ( res2 )=>{
        console.log("Promise对象的状态变为 rejected 失败" , res2);
    } )
</script>